|
1
|
|
|
/** |
|
2
|
|
|
* A module for a standard playing card. |
|
3
|
|
|
* |
|
4
|
|
|
* @module |
|
5
|
|
|
*/ |
|
6
|
|
|
"use strict"; |
|
7
|
|
|
|
|
8
|
|
|
class Memorycard { |
|
9
|
|
|
/** |
|
10
|
|
|
* @constructor |
|
11
|
|
|
*/ |
|
12
|
|
|
constructor() { |
|
13
|
24 |
|
this.cards = new Map([ |
|
14
|
|
|
["00", "alpaca.png"], ["10", "alpaca.png"], |
|
15
|
|
|
["20", "giraff.png"], ["30", "giraff.png"], |
|
16
|
|
|
["01", "monkeys.png"], ["11", "monkeys.png"], |
|
17
|
|
|
["21", "panda.png"], ["31", "panda.png"], |
|
18
|
|
|
["02", "puppy.png"], ["12", "puppy.png"], |
|
19
|
|
|
["22", "ram.png"], ["32", "ram.png"], |
|
20
|
|
|
["03", "wolf.png"], ["13", "wolf.png"], |
|
21
|
|
|
["23", "squirrel.png"], ["33", "squirrel.png"], |
|
22
|
|
|
["04", "fox.png"], ["14", "fox.png"], |
|
23
|
|
|
["24", "bear.png"], ["34", "bear.png"], |
|
24
|
|
|
]); |
|
25
|
24 |
|
this.cardvalues = [ |
|
26
|
|
|
"alpaca.png", "alpaca.png", |
|
27
|
|
|
"giraff.png", "giraff.png", |
|
28
|
|
|
"monkeys.png", "monkeys.png", |
|
29
|
|
|
"panda.png", "panda.png", |
|
30
|
|
|
"puppy.png", "puppy.png", |
|
31
|
|
|
"ram.png", "ram.png", |
|
32
|
|
|
"wolf.png", "wolf.png", |
|
33
|
|
|
"squirrel.png", "squirrel.png", |
|
34
|
|
|
"fox.png", "fox.png", |
|
35
|
|
|
"bear.png", "bear.png" |
|
36
|
|
|
]; |
|
37
|
24 |
|
this.positions = [ |
|
38
|
|
|
"00", "10", "20", "30", |
|
39
|
|
|
"01", "11", "21", "31", |
|
40
|
|
|
"02", "12", "22", "32", |
|
41
|
|
|
"03", "13", "23", "33", |
|
42
|
|
|
"04", "14", "24", "34" |
|
43
|
|
|
]; |
|
44
|
|
|
// this.cardvalue = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]; |
|
45
|
|
|
// this.defaultcardpositions = [ |
|
46
|
|
|
// "00", "10", "20", "30", |
|
47
|
|
|
// "01", "11", "21", "31", |
|
48
|
|
|
// "02", "12", "22", "32" |
|
49
|
|
|
// ]; |
|
50
|
|
|
// this.cardpositions = this.defaultcardpositions; |
|
51
|
24 |
|
this.numOfCards = 20; |
|
52
|
|
|
} |
|
53
|
|
|
|
|
54
|
|
|
/** |
|
55
|
|
|
* Get value of memorycard based on its position. |
|
56
|
|
|
* |
|
57
|
|
|
* @param {string} position - The positin of the memorycard. |
|
58
|
|
|
* |
|
59
|
|
|
* @returns {string} value of memorycard. |
|
60
|
|
|
*/ |
|
61
|
|
|
getCardValue(position) { |
|
62
|
12 |
|
var value = this.cards.get(position); |
|
63
|
|
|
|
|
64
|
|
|
// console.log("Inne i getCardValue"); |
|
65
|
|
|
// console.log(position); |
|
66
|
12 |
|
return value; |
|
67
|
|
|
} |
|
68
|
|
|
|
|
69
|
|
|
/** |
|
70
|
|
|
* Get positions of cards with certain value |
|
71
|
|
|
* |
|
72
|
|
|
* @param {string} cardvalue |
|
|
|
|
|
|
73
|
|
|
* |
|
74
|
|
|
*/ |
|
75
|
|
|
getPairPositions(pairvalue) { |
|
76
|
|
|
var pairpositions = []; |
|
77
|
|
|
|
|
78
|
|
|
this.cards.forEach(function(cardvalue, position, cards) { |
|
79
|
|
|
console.log(cards); |
|
|
|
|
|
|
80
|
4 |
|
if (cardvalue == pairvalue) { |
|
81
|
|
|
pairpositions.push(position); |
|
82
|
|
|
} |
|
83
|
|
|
}); |
|
84
|
|
|
return pairpositions; |
|
85
|
|
|
} |
|
86
|
|
|
|
|
87
|
|
|
/** |
|
88
|
|
|
* Get id of memorycard based on value. |
|
89
|
|
|
* |
|
90
|
|
|
* @param {integer} id - The id of the card. |
|
91
|
|
|
* |
|
92
|
|
|
* @returns {array} possible id:s of card with value in format [id, id] |
|
93
|
|
|
*/ |
|
94
|
|
|
// getCardId(value) { |
|
95
|
|
|
// if (value < 1 || value >= this.cardvalue[this.numOfCards - 1]) { |
|
96
|
|
|
// return [-1, -1]; |
|
97
|
|
|
// } |
|
98
|
|
|
// |
|
99
|
|
|
// var result = []; |
|
100
|
|
|
// var pos = this.cardvalue.indexOf(value); |
|
101
|
|
|
// |
|
102
|
|
|
// // walking cardvalue and adding posiiton to result[] where correct value |
|
103
|
|
|
// while (result.indexOf(pos) === -1) { |
|
104
|
|
|
// result.push(pos); |
|
105
|
|
|
// pos = this.cardvalue.indexOf(value, pos + 1); |
|
106
|
|
|
// } |
|
107
|
|
|
// |
|
108
|
|
|
// // result contains positions and -1. Splice to take away -1. |
|
109
|
|
|
// result.splice(2, 1); |
|
110
|
|
|
// |
|
111
|
|
|
// return result; |
|
112
|
|
|
// } |
|
113
|
|
|
|
|
114
|
|
|
/** |
|
115
|
|
|
* Is two memorycards a pair. |
|
116
|
|
|
* |
|
117
|
|
|
* @param {integer} id - The id of the card. |
|
|
|
|
|
|
118
|
|
|
* |
|
119
|
|
|
* @returns {booelan} true if pair, false if not. |
|
120
|
|
|
*/ |
|
121
|
|
|
isPair(posone, postwo) { |
|
122
|
|
|
// if (cardone < 0 || cardone >= this.numOfCards) { |
|
123
|
|
|
// return undefined; |
|
124
|
|
|
// } |
|
125
|
|
|
// if (cardtwo < 0 || cardtwo >= this.numOfCards) { |
|
126
|
|
|
// return undefined; |
|
127
|
|
|
// } |
|
128
|
|
|
|
|
129
|
8 |
|
return this.cards.get(posone) == this.cards.get(postwo); |
|
130
|
|
|
} |
|
131
|
|
|
|
|
132
|
|
|
/** |
|
133
|
|
|
* Place memorycards = set this.cardpositions. |
|
134
|
|
|
*/ |
|
135
|
|
|
placeCards(random = true) { |
|
136
|
4 |
|
if (random) { |
|
137
|
2 |
|
this.shuffle(); |
|
138
|
|
|
} |
|
139
|
|
|
|
|
140
|
4 |
|
for (let i = 0; i < this.positions.length; i++) { |
|
141
|
80 |
|
this.cards.set(this.positions[i], this.cardvalues[i]); |
|
142
|
|
|
} |
|
143
|
|
|
} |
|
144
|
|
|
|
|
145
|
|
|
shuffle() { |
|
146
|
2 |
|
var n = this.numOfCards, |
|
147
|
|
|
temp, |
|
148
|
|
|
i; |
|
149
|
|
|
|
|
150
|
|
|
// While there remain elements to shuffle… |
|
151
|
2 |
|
while (n) { |
|
152
|
|
|
// Pick a remaining element… |
|
153
|
40 |
|
i = Math.floor(Math.random() * n--); |
|
154
|
|
|
|
|
155
|
|
|
// And swap it with the current element. |
|
156
|
40 |
|
temp = this.cardvalues[n]; |
|
157
|
40 |
|
this.cardvalues[n] = this.cardvalues[i]; |
|
158
|
40 |
|
this.cardvalues[i] = temp; |
|
159
|
|
|
} |
|
160
|
|
|
} |
|
161
|
|
|
|
|
162
|
|
|
getCardValues() { |
|
163
|
|
|
return [...this.cards.values()]; |
|
164
|
|
|
} |
|
165
|
|
|
} |
|
166
|
|
|
|
|
167
|
|
|
// Export module |
|
168
|
|
|
module.exports = Memorycard; |
|
169
|
|
|
|